#include <stdio.h>
#include <errno.h>
#include <error.h>
#include <unistd.h>
#include <sys/types.h>

#define MIXMES 1024

int main(void)
{
    //pipe进程间通信的惯用法
    //1.先pipe
    
    //参数为传出参数，说明参数会在函数中改变，pipe会将两个文件打开文件的fd（文件描述符）放在参数中，
    //pipefd[0]表示读端  [1]表示写端
    int pipefd[2];
    if(pipe(pipefd) == -1)
    {
        //返回-1错误处理
        error(1, errno, "pipe");
    }
    //2.fork
    pid_t pid = fork();
    switch (pid)
    {
        case -1:
            error(1, errno, "fork");
        case 0 :
        {
            //3.子进程关闭一个通道
            char message[MIXMES];
            //读取数据
            read(pipefd[0], message, MIXMES);   //如果管道没有数据，会一直阻塞
            printf("message: %s", message);
            close(pipefd[1]); //关闭写端，读取父进程数据
            break;
        }
        default:
            //4.父进程关闭一个通道
            close(pipefd[0]);  //关闭读端，写数据
            sleep(5);
            write(pipefd[1], "hello from father\n", 18+1);   // +1 for‘\0’，因为message数组没有初始化会有乱码+1，字符串会默认带有空字符，截断
    }
    return 0;
}